home *** CD-ROM | disk | FTP | other *** search
-
-
- COMMENT * REPORT.COM Written by James L. Johnsen
- 402 Beech Street
- Fort Washington Md. 20744
- Home Phone (301) 292-7169 *
- ;
- .RADIX 16 ;ALL NUMERICS ENTERED ARE NOW BASE 16.
- STACKSEG SEGMENT STACK ;FAKE OUT THE LINKER.
- STACKSEG ENDS
- CODESEG SEGMENT PARA PUBLIC 'CODE'
- ASSUME CS:CODESEG,DS:CODESEG,ES:NOTHING
- ORG 100
- EFFZERO EQU 0F0
- ZEROEFF EQU 0F
- ; MOVE EVERYTHING TO STORAGE
- MOV WORD PTR [STORAX],AX
- MOV WORD PTR [STORBX],BX
- MOV WORD PTR [STORCX],CX
- MOV WORD PTR [STORDX],DX
- MOV WORD PTR [STORSP],SP
- MOV WORD PTR [STORBP],BP
- MOV WORD PTR [STORSI],SI
- MOV WORD PTR [STORDI],DI
- MOV WORD PTR [STORCS],CS
- MOV WORD PTR [STORDS],DS
- MOV WORD PTR [STORSS],SS
- MOV WORD PTR [STORES],ES
- ; PROCESS ALL THE VALUES
- MOV WORD PTR [VARIBLE1],'XA'
- MOV AX,WORD PTR [STORAX]
- CALL PROCESS1
- MOV WORD PTR [VARIBLE1],'XB'
- MOV AX,WORD PTR [STORBX]
- CALL PROCESS1
- MOV WORD PTR [VARIBLE1],'XC'
- MOV AX,WORD PTR [STORCX]
- CALL PROCESS1
- MOV WORD PTR [VARIBLE1],'XD'
- MOV AX,WORD PTR [STORDX]
- CALL PROCESS1
- MOV WORD PTR [VARIBLE1],'PS'
- MOV AX,WORD PTR [STORSP]
- CALL PROCESS1
- MOV WORD PTR [VARIBLE1],'PB'
- MOV AX,WORD PTR [STORBP]
- CALL PROCESS1
- MOV WORD PTR [VARIBLE1],'IS'
- MOV AX,WORD PTR [STORSI]
- CALL PROCESS1
- MOV WORD PTR [VARIBLE1],'ID'
- MOV AX,WORD PTR [STORDI]
- CALL PROCESS1
- MOV WORD PTR [VARIBLE1],'SC'
- MOV AX,WORD PTR [STORCS]
- CALL PROCESS1
- MOV WORD PTR [VARIBLE1],'SD'
- MOV AX,WORD PTR [STORDS]
- CALL PROCESS1
- MOV WORD PTR [VARIBLE1],'SS'
- MOV AX,WORD PTR [STORSS]
- CALL PROCESS1
- MOV WORD PTR [VARIBLE1],'SE'
- MOV AX,WORD PTR [STORES]
- CALL PROCESS1
- ; THEN RESTORE ALL THE REGISTERS
- MOV AX,WORD PTR [STORAX]
- MOV BX,WORD PTR [STORBX]
- MOV CX,WORD PTR [STORCX]
- MOV DX,WORD PTR [STORDX]
- MOV SP,WORD PTR [STORSP]
- MOV BP,WORD PTR [STORBP]
- MOV SI,WORD PTR [STORSI]
- MOV DI,WORD PTR [STORDI]
- MOV DS,WORD PTR [STORDS]
- MOV SS,WORD PTR [STORSS]
- MOV ES,WORD PTR [STORES]
- INT 20
- PROCESS1:
- MOV BYTE PTR [STORAL],AL ;AL TO STORAGE
- MOV BYTE PTR [STORAH],AH ;AH TO STORAGE
- CALL HEXDEC ;CONVERT TO ASCII
- CALL MOVE_TO_VARIABLES ;MOVE ASCII TO STRING
- XOR AX,AX ;CLEAR AX REG
- CALL SEND_REPORT ;THEN REPORT CONTENTS
- RET ;AND RETURN TO CALLER
- MOVE_TO_VARIABLES:
- MOV AL,BYTE PTR [LOW_NIBBLEAL] ;LOW NIBBLE OF AL TO AL
- MOV BYTE PTR [VARIBLE5],AL ;AL TO LOWNIB POS IN STRING
- MOV AL,BYTE PTR [HI_NIBBLEAL] ;HI NIBBLE OF AL TO AL
- MOV BYTE PTR [VARIBLE4],AL ;AL TO HINIB POS IN STRING
- MOV AL,BYTE PTR [LOW_NIBBLEAH] ;LOW NIBBLE OF AH TO AL
- MOV BYTE PTR [VARIBLE3],AL ;AL TO LOWNIB FOR AH POS
- MOV AL,BYTE PTR [HI_NIBBLEAH] ;HI NIBBLE OF AH TO AL
- MOV BYTE PTR [VARIBLE2],AL ;AL TO HINIB FOR AH POS
- RET ;AND RETURN TO CALLER
- HEXDEC: XOR AX,AX ;CLEAR AX REG
- MOV AL,BYTE PTR [STORAL] ;GET VALUE
- AND AL,ZEROEFF ;MASK OFF HI NIBBLE
- CALL PROC_LOWNIBBLE ;AND GET THE ASCII FOR IT
- MOV BYTE PTR [LOW_NIBBLEAL],AL ;THEN MOVE THAT TO STORAGE
- XOR AX,AX ;CLEAR THE AX REG
- MOV AL,BYTE PTR [STORAL] ;GET THE VALUE AGAIN
- CALL PROC_HINIBBLE ;TO PROCESS THE HIGH NIBBLE
- CALL PROC_LOWNIBBLE ;THEN TO THE SAME JOB AGAIN
- MOV BYTE PTR [HI_NIBBLEAL],AL ;MOVE IT TO STORAGE
- XOR AX,AX ;CLEAR THE AX REGISTER AGAIN
- MOV AL,BYTE PTR [STORAH] ;MOVE THE AH REG VALUE INTO AL
- AND AL,ZEROEFF ;AND MASK OFF THE HI NIBBLE
- CALL PROC_LOWNIBBLE ;AND GET THE ASCII VALUE OF IT
- MOV BYTE PTR [LOW_NIBBLEAH],AL ;THEN STORE IT
- XOR AX,AX ;CLEAR THE AX REGISTER AGAIN
- MOV AL,BYTE PTR [STORAH] ;AND GET THE AH REG VALUE AGAIN
- CALL PROC_HINIBBLE ;PROCESS FOR THE HI NIBBLE
- CALL PROC_LOWNIBBLE ;TO THE SAME JOB AGAIN
- MOV BYTE PTR [HI_NIBBLEAH],AL ;AND STORE IT
- XOR AX,AX ;CLEAR AX AGAIN
- RET ;AND RETURN TO CALLER
- PROC_LOWNIBBLE:
- DAA ;IF >9 THEN ADD 06
- PUSH AX ;WHICH SET AUX_CARRY_FLAG
- LAHF ;SO LOAD THE FLAGS TO CHECK
- AND AH,10 ;MASK ALL EXCEPT AUX_FLAG
- CMP AH,10 ;CHECK FOR FLAG SET
- JNZ OVER1 ;IF IT ISN'T SET JUST ADD 30H
- POP AX ;RESTORE THE SAVED DATA
- ADD AL,31 ;ELSE IT'S SET, ADD 31 [ >9 ]
- JMP OVER2 ;DON'T ADD AGAIN, JUMP OVER IT
- OVER1: POP AX ;ADDING 30H IS FOR NUMBERS
- ADD AL,30 ;ADDING 31H IS FOR A through F
- OVER2: RET ;RETURN TO CALLER
- PROC_HINIBBLE:
- XOR CX,CX ;CLEAR CX, JUST TO BE SURE
- AND AL,EFFZERO ;MASK OFF LEAST SIGNIFICANT NIBB
- MOV CL,04 ;HOW MANY TIMES TO SHIFT?
- SHR AL,CL ;THEN MOVE MOST SN TO LEAST SN
- RET ;RETURN TO CALLER
- SEND_REPORT:
- MOV SI,OFFSET REPORT1 ;POINT TO STRING
- XOR CX,CX ;CLEAR CX, JUST TO BE SURE
- MOV CL,3DH ;HOW MANY CHARACTERS TO SEND
- NEXT: LODSB ;LOAD INTO AL POINTED BY SI
- MOV AH,0EH ;MOVE VIDEO FUNCTION INTO AH
- MOV BH,00 ;WRITE TTY TO PAGE ZERO(0)
- INT 10 ;DO IT
- LOOP NEXT ;LOOP IS, CX=CX-1 TILL CX=0000
- RET ;WHEN CX=0000, RETURN
- REPORT1: DB 'The '
- VARIBLE1: DW 0
- DB ' Register Has The Value '
- VARIBLE2: DB 0
- VARIBLE3: DB 0
- VARIBLE4: DB 0
- VARIBLE5: DB 0
- DB ' HEX in it at the moment.',0AH,0DH
- STORAL: DB 0
- STORAH: DB 0
- STORAX: DW 0
- STORBX: DW 0
- STORCX: DW 0
- STORDX: DW 0
- STORSP: DW 0
- STORBP: DW 0
- STORSI: DW 0
- STORDI: DW 0
- STORCS: DW 0
- STORDS: DW 0
- STORSS: DW 0
- STORES: DW 0
- LOW_NIBBLEAL: DB 0
- HI_NIBBLEAL: DB 0
- LOW_NIBBLEAH: DB 0
- HI_NIBBLEAH: DB 0
- CODESEG ENDS
- END
-
- SS: DW 0
- STORES: DW 0
- LOW_NIBBLEAL: DB 0
- HI_NIBBLEAL: DB 0
- LOW_NIBBLEAH: DB 0
- HI_NIBBLEAH: DB 0
- CODES